package com.baaio.conn.Interface;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * 数据连接接口
 * 
 * 
 */
public interface BaaioConn
{

	/**
	 * 查询数据方法，提供三个参数<br>
	 * list的里面的值是多个字段查询。<br>
	 * 比如有id,name,sex,等字段，我们就可以用list.add("id")和list.add("name"),<br>
	 * flied 参数是查询条件，比如 "where id='3'" 那么就会查询出包含id和name该两个字段id值为3的数据
	 * 
	 * @param tableName
	 *            表名
	 * @param list
	 *            需要查询的指定字段，""这样指查询所有数据
	 * @param condiction
	 *            查询条件
	 * @return ResultSet
	 */
	public ResultSet queryData(String tableName, ArrayList<String> list,
			String condiction);
	/**
	 * 重载的查询方法，目的是在单个查询
	 * 查询语句相当于
	 * select name from study where id='520'
	 * @param tableName 表名
	 * @param fields 字段名
	 * @param condiction 查询值
	 * @return ResultSet
	 */
	public ResultSet queryData(String tableName, String fields, String condiction);
	
	
	/**
	 * 查询数据<br>
	 * 使用方法：<br>
	 * BaaioConnImpl bic = new BaaioConnImpl();<br>
	 * Study study = new Study();<br>
	 * bic.queryData(study,"12");<br>
	 * <br>
	 * ================================<br>

	 * 执行的结果就是。<br>
	 * 
	 * 数据库连接成功<br>
	 * Sql = select * from study where idstudy='12'<br>
	 * 12
	 * f
	 * @param object 要删除信息的对象
	 * @param value  对象的主键值
	 */
	public ResultSet queryData(Object object,String value);
	
	
	public Object queryDataB(Object object,String value);
	public Object queryDataA(Object object);
	/**
	 * 对数据库表进行插入操作<br>
	 * map 的key表示表单名字，vlaue为需要插入的值
	 * @param table 表单名字
	 * @param map 插入对象
	 */
	public boolean saveData(String table, HashMap<String, String> map);
	
	/**
	 * 接收一个bean对象。<br>
	 * 该对象对应于数据库里表。<br>
	 * bean名字许与数据库表名字相同。大小写无关。<br>
	 * 
	 * 
	 * @param obejct
	 */
	public boolean saveData(Object obejct);
	/**
	 * 删除数据<br>
	 * 使用方法：<br>
	 * BaaioConnImpl bic = new BaaioConnImpl();<br>
	 * Study study = new Study();<br>
	 * bic.removeDate(study,"12");<br>
	 * <br>
	 * ================================<br>

	 * 执行的结果就是。<br>
	 * 
	 * 数据库连接成功<br>
	 * Sql = delete * from study where idstudy='12'<br>
	 * @param object 要删除信息的对象
	 * @param value  对象的主键值
	 */
	public boolean removeData(Object object,String value);
	
	/**
	 * 删除数据
	 * @param tableName 表名
	 * @param condiction 查询条件
	 */
	public boolean removeData(String tableName, String condiction);
	/**
	 * 该方法实现批量删除<br>
	 * list的为在指定cName字段下删除list里面相等的数据。
	 * @param tableName 表名
	 * @param cName 字段名
	 * @param list 需要删除的值
	 */
	public boolean removeData(String tableName, String cName,
			ArrayList<String> list);
	/**
	 * 删除数据
	 * 在指定字段dcName下删除值为value的数据
	 * @param tableName
	 * @param dcName
	 * @param condiction
	 */
	public boolean removeData(String tableName, String dcName, String condiction);

	/**
	 * 数据更新<br>
	 * map的键对于与表单名字，value是需要更新的值。<br>
	 * map的用意在于一行数据多个字段的值更新
	 * @param table 表名
	 * @param map 更新对象
	 * @param upCondition 更新条件
	 */
	public boolean updateData(String table, HashMap<String, String> map,
			String upCondition);
	/**
	 * 更新数据<br>
	 * @param object 新的对象
	 * @param upConditionObject 更新对象
	 */
	public boolean updateData(Object object,Object upConditionObject);
	/**
	 * 在以上方法都不能满足要求的时候，可以调用这个方法。<br>
	 * 
	 * @param sql 查询语句
	 * @return ResultSet
	 */
	public ResultSet query(String sql);
	/**
	 * 查询指定表的所有信息
	 * @param tableName
	 * @return
	 */
	public ResultSet queryX(String tableName);
	/**
	 * 左外连接<br>
	 * 实际的查询语句等于： select * from ATableName left join BTableName on Akey=Bkey;
	 * @param A
	 * @param B
	 * @return
	 */
	public ResultSet lift(Object A, Object B);
	
	/**
	 * 清空制定表的内容
	 * @param tableName
	 * @return
	 */
	public boolean clearTableTruncate(String tableName);
	
	public void close();
	/**
	 * 判断表里面的字段item是否有值value，如果存在返回true，否则为false。
	 * @param tabelName
	 * @param item
	 * @param value
	 * @return
	 */
	public boolean hasData(String tabelName ,String item,String value);
	
	public boolean hasData(Object object);
	

}
